home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 46 / Amiga Format CD46 (1999-10-20)(Future Publishing)(GB)[!][issue 1999-12].iso / -serious- / programming / other / tandem / teaching / 38.asm < prev    next >
Assembly Source File  |  1999-09-06  |  4KB  |  114 lines

  1. * 38.asm     TLreqmenu       version 0.01    8.6.99
  2.  
  3.  
  4.  include 'Front.i'         ;*** change to 'Tandem.i' to step thru TL's ***
  5.  
  6.  
  7. ; This program is designed to demonstrate the use of TLreqmenu.
  8. ; To use TLreqmenu, you must first create a NewMenu structure, and then
  9. ; call TLreqmenu. This creates a value in xxp_Menu which can then be
  10. ; used by TLreqmuset to attach the menu strip to a window, or TLreqmuclr
  11. ; to detach it. While the menu strip is attached, if the user makes a menu
  12. ; selection, it will be returned by the next TLkeyboard, with the value
  13. ; $95 in D0; the menu num, item num and sub-item num will be in D1-D3.
  14. ; If any of these are null, they will be -1 (n.b. separator bars count
  15. ; as items, but cannot be selected).
  16.  
  17. ; When you set up the NewMenu, you can if you like put string numbers in
  18. ; Label fields, which TLreqmenu will convert to pointers. You may also use
  19. ; one only string with some/all of the hotkey characters in it in order.
  20. ; Then, put that string number in the CommKey field, and Reqmenu will
  21. ; convert it to a pointer. (Although TLnm's change their contents when run,
  22. ; they can safely be rerun, or be part of a PURE program).
  23.  
  24. ; the newmenu memory area below (an instance of a NewMenu structure) uses
  25. ; the TLnm MACRO.  TLnm requires \1 to be 1,2,3 or 4 for NM_TITLE,
  26. ; NM_ITEM, NM_SUB or NM_END. \2 is the string number of the label.
  27. ; \3 (if present) is the string number of the CommKeys string. If \2
  28. ; is -1, it is an NM_BARLABEL. (You can also use pointers instead of
  29. ; string numbers for \2 and \3 if you want). Refer also to
  30. ; libraries/gadtools.i for details of Amiga's NewMenu structure. \4 and
  31. ; \5 (if present) are explained in tandem.i's AUTODOC for TLnm.
  32.  
  33.  
  34. * The NewMenu structure (the \2 and \3 values refer to string numbers)
  35. newmenu:
  36.  TLnm 1,3      ;Menu 0
  37.  TLnm 2,4,13   ;  Item 0         A
  38.  TLnm 2,5      ;  Item 0
  39.  TLnm 3,6,13   ;    Sub-item 0   B
  40.  TLnm 3,7      ;    Sub-item 1
  41.  TLnm 2,8      ;  Item 2
  42.  TLnm 2,-1     ;  (bar)
  43.  TLnm 2,9      ;  Item 3
  44.  TLnm 1,10     ;Menu 1
  45.  TLnm 2,11,13  ;  Item 0         C
  46.  TLnm 2,12     ;  Item 1
  47.  TLnm 4,0      ;delimiter
  48.  
  49.  
  50. strings: dc.b 0
  51. st_1: dc.b 'Test TLReqmenu',0 ;1
  52.  dc.b 'You chose menu '
  53. st_2a: dc.b ' , item '
  54. st_2b: dc.b ' , sub-item '
  55. st_2c: dc.b ' .',0            ;2
  56.  dc.b 'Menu 0',0              ;3
  57.  dc.b 'Item 0',0              ;4 CommKey A
  58.  dc.b 'Item 1',0              ;5
  59.  dc.b 'Sub-item 0',0          ;6 CommKey B
  60.  dc.b 'Sub-item 1',0          ;7
  61.  dc.b 'Item 2',0              ;8
  62.  dc.b 'Item 4 (bar=3)',0      ;9
  63.  dc.b 'Menu 1',0              ;10
  64.  dc.b 'Item 0',0              ;11 CommKey C
  65.  dc.b 'Item 1',0              ;12
  66.  dc.b 'ABC',0                 ;13 (the CommKeys)
  67.  dc.b '(Choose a menu item, or click close gadget)',0           ;14
  68.  dc.b 'Error: can''t open screen/window. Out of chip memory',0  ;15
  69.  dc.b 'Error: the gadtools.library could not set up the menu',0 ;16
  70.  
  71.  ds.w 0
  72.  
  73.  
  74. * program to demonstrate  TLreqmenu
  75. Program:
  76.  TLwindow #0,#0,#0,#300,#120,#640,#256,#0,#st_1
  77.  beq.s Pr_quit             ;go if can't
  78.  bsr Test                  ;do test of Reqmenu
  79.  rts
  80.  
  81. Pr_quit:
  82.  TLbad #15
  83.  rts
  84.  
  85.  
  86. * test Reqmenu
  87. Test:
  88.  TLreqmenu #newmenu        ;set up xxp_Menu
  89.  beq Te_bad                ;bad if can't
  90.  TLreqmuset                ;attach menu to window
  91.  TLstring #14,#20,#19      ;ask user to select an item
  92.  
  93. Te_wait:
  94.  TLkeyboard                ;get response
  95.  cmp.w #$93,d0
  96.  beq.s Te_quit             ;done if close gadget
  97.  cmp.w #$95,d0
  98.  bne Te_wait               ;else, keep waiting until menu item selected
  99.  add.b #'0',d1
  100.  move.b d1,st_2a           ;report menu number ('0' if null)
  101.  add.b #'0',d2
  102.  move.b d2,st_2b           ;report item number ('0' if null)
  103.  add.b #'0',d3
  104.  move.b d3,st_2c           ;report sub-item no ('0' if null)
  105.  TLstring #2,#20,#40       ;report choice, and continue
  106.  bra Te_wait
  107.  
  108. Te_quit:
  109.  rts
  110.  
  111. Te_bad:
  112.  TLbad #16                 ;error condition if can't create menu
  113.  rts
  114.